#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int n,m;
void solve()
{
	cin>>n>>m;
	vector<int> v;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			int t1=abs(i-1)+abs(j-1);
			int t2=abs(i-1)+abs(j-m);
			int t3=abs(i-n)+abs(j-1);
			int t4=abs(i-n)+abs(j-m);
			int mx=max(max(t1,t2),max(t3,t4));
			v.push_back(mx);
		}
	}

	sort(all(v));
	for(int i=0;i<v.size();i++)
	{
		cout<<v[i]<<" ";
	}
	cout<<'\n';


	
}

int main()
{
	close();
	int T; cin>>T;
	while (T--) solve();
	return 0;
}
//k桶油漆
//首先，蒂娜在教室里选择k个座位用粉红色油漆。一桶油漆正好可以涂一个座位。
//在Tina上一步画完k个座位后，Rahul选择他坐的位置。他不会选择被漆成粉红色的座位
//rahul选好座位后，Tina为自己选了一个座位。除了拉胡尔选的座位，她可以选择任何一个座位，不管画不画。

//拉胡尔想选一个离蒂娜尽可能近的座位。然而，蒂娜想坐得离拉胡尔越远越好

//现在问T在可以将x xx个座位涂上粉红色时，T和R之间最小的最大距离。

//有一个n*m的座位，T可以进行涂粉色，涂粉色的座位R不坐。T先涂，然后R选座位，要使得无论T怎么选距离都是最近最后T选座位，要尽量远离R，k为 0 00 ~ n ∗ m − 1 n*m-1n∗m−1 时T和R之间的距离

//躲避者涂色的时候，必然是从中间开始涂，期望把追求者怼到某个角落，这样使得最远；
//这样模拟不好写,就枚举每个点到四个角的最远距离,排个序,刚开始的r一定想坐在中间,这样离四个角的距离都差不多,也就相差最近